#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h> 
#include <unistd.h>
#include <errno.h> //全局变量errno声明的头文件

#if 0

//头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

函数原型
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode)

函数作用：打开或者创建一个文件
参数：
    pathname: 你要打开的文件的路径+名字   比如你要打开1.txt  open("/mnt/hgfs/GZ2418/07-文件IO/01-系统IO/1-code/1.txt");
    flags: 你要以什么方式打开文件，也就是说你打开文件之后， 你要干嘛
        O_RDONLY   read only    只读   如果你使用了该宏，表示你打开文件之后 只能读取数据  不能写
        O_WRONLY   write only   只写   如果你使用了该宏，表示你打开文件之后 只能写入数据  不能读
        O_RDWR     read and write   读写   如果你使用了该宏，表示你打开文件之后 既可以读取数据，也可以写入数据
返回值：
    成功 返回fd 一个非负整数，返回的值 >=0    该int类型的数据 用来代表 打开的文件，也就是文件的代号  文件描述符
    失败 返回 -1  错误被标记

//头文件
    #include <unistd.h>
函数原型
    int close(int fd);
函数作用：关闭一个文件
参数：
    fd: 你要关闭的文件的代号



头文件 #include <string.h> 
定义函数 char * strerror(int errnum);




#endif 

// const char *err[] = {
//     "Success",
//     "No such file or directory",
//     "No such process",
//     "Interrupted system call",
//     "I/O error",
//     "No such device or address",
//     "Argument list too long",
//     "Exec format error",
//     "Bad file descriptor",
//     "No child processes",
//     "Resource temporarily unavailable",
//     "Cannot allocate memory",
//     "Permission denied",
//     "Bad address",
//     "Block device required",
// };


// int open(const char *pathname, int flags)
// {
//     //打开文件 
//     如果打开失败了，会把这个失败的错误码标记在 一个全局变量errno中
//     errno = 1;
//     这个全局变量errno 是我们程序运行的时候 系统自动给我们加了这个全局变量 不需要我们用户自己定义 

//     return -1;
// }


int main()
{
    //1 打开文件  只读  返回值 fd 代表这个已经打开的文件，代号编号
    int fd = open("./1.txt",O_RDONLY);
    if(fd == -1)
    {
        //如何打印错误原因
        //printf("open error: errno:%d %s\n",errno,strerror(errno));
        perror("open error");
        return -1;
    }
    printf("fd = %d\n",fd);

    //.......

    //2  关闭文件
    close(fd);
}